#include <iostream>
#include <vector>

using namespace  std;

// 函数模板 -- 参数匹配
//template<class T>
//bool Less(T left, T right)
//{
// return left < right;
//}
//
//template<class>
//bool Less(Date*)(Date* left, Date* right)
//{
//  return *left < *right;
//}
//
//int main()
//{
// cout << Less(1, 2) << endl; // 可以比较，结果正确
// Date d1(2022, 7, 7);
// Date d2(2022, 7, 8);
// cout << Less(d1, d2) << endl; // 可以比较，结果正确
// Date* p1 = &d1;
// Date* p2 = &d2;
// cout << Less(p1, p2) << endl; // 可以比较，结果错误
// return 0;
//}

//    template <class>
//	struct less<T*>
//	{
//		bool operator()(const T* left, const T* right)const
//		{
//			return *left < *right;
//		}
//	};
 
//template  <class T1>
//class Data<T1, int>
//{
//public:
// Data() {cout<<"Data<T1, int>" <<endl;}
//private:
// T1 _d1;
// int _d2;
//};
//
//int main()
//{
//  Data<int> d1;
//  Data<double> d2;
//  return 0;
//}

// 模板
template<class T1, class T2>
class Data
{
public:
 Data() {cout<<"Data<T1, T2>" <<endl;}
private:
 T1 _d1;
 T2 _d2;
};
// 全特化
template<>
class Data<int, char>
{
public:
 Data() {cout<<"Data<int, char>" <<endl;}
private:
 int _d1;
 char _d2;
};

// 偏特化
template < class m1>
class Data<m1, char>
{
public:
 Data() {cout<<"Data<m1, char>" <<endl;}
private:
 m1 _d1;
 char _d2;
};

void TestVector()
{
 Data<int, int> d1;
 Data<int, char> d2;
}

int main()
{
  TestVector();
  return 0;
}
